package com.blog.service;

import com.blog.pojo.Article;
import com.blog.pojo.ArticleWithAuthorNameVO;
import com.blog.pojo.PageBean;


import java.util.List;

public interface ArticleService {
    /**
     * 分页查看所有文章
     * @return
     */
    PageBean listAll(Integer page, Integer pageSize);

    /**
     * 查询单篇文章
     * @param id 文章id
     * @return
     */
    ArticleWithAuthorNameVO listById(Integer id);

    /**
     * 分页查看标签内所有文章
     * @param tagId 标签id
     * @return
     */
    PageBean listByTag(Integer tagId, Integer page, Integer pageSize);

    /**
     * 分页查看关注的所有文章
     * @return
     */
    PageBean listByFocus(Integer page, Integer pageSize);

    /**
     * 分页查看用户的所有文章
     * @param id 用户id
     * @return
     */
    PageBean listByUserId(Integer id, Integer page, Integer pageSize);

    /**
     * 分页查看当前登录用户的所有文章
     * @return
     */
    PageBean listCurrentUser(Integer page, Integer pageSize);

    /**
     * 分页查看当前登录用户感兴趣的所有文章
     * @return
     */
    PageBean listByHobbies(Integer page, Integer pageSize);

    /**
     * 分页查看搜索匹配到的所有文章
     * @param condition 匹配字符串
     * @return
     */
    PageBean listByCondition(String condition, Integer page, Integer pageSize);

    /**
     * 发布文章
     * @param article 文章实体类
     */
    void add(Article article, List<Integer> tagIds);

    /**
     * 编辑文章
     * @param article
     */
    void update(Article article);

    /**
     * 批量删除文章
     * @param ids 文章id
     */
    void delete(List<Integer> ids);

    /**
     * 根据id查找文章实体
     * @param id 文章id
     * @return
     */
    Article findById(Integer id);

    /**
     * 给文章点赞
     * @param articleId 文章id
     */
    boolean support(Integer articleId);

    /**
     * 文章点赞排行榜，取前五
     * @param limit 取前几
     * @return 文章列表
     */
    List<Article> sortBySupport(Integer limit);

}
